Concurrent searching of different tables within a content addressable memory

ABSTRACT

A method and apparatus are described for the filtering of a common input string to generate various filtered comparand strings. The filtering of a common input string enables concurrent lookups in different tables to be performed on multiple filtered comparands by different CAM devices (or different blocks within a CAM device), to compare the data in the filtered comparand strings with data stored in its associative memory. By performing multiple lookups in parallel, rather than sequentially, packet throughput in a CAM may be significantly increased.

REFERENCE TO RELATED APPLICATION

[0001] This application is a continuation of application Ser. No.09/935,997 filed Aug. 22, 2001, which is hereby incorporated byreference.

FIELD OF THE INVENTION

[0002] This invention relates to the field of memory devices and, inparticular, to content addressable memory devices.

BACKGROUND OF THE INVENTION

[0003] Networks may contain a collection of computing systems (e.g.,clients and servers) that are interconnected by transmission lines toenable the transfer of data between them. A network typically includesmultiple access points (e.g., routers and servers) that may switchand/or route data between transmission lines to transfer data from asource to a destination. Data is typically transmitted in the form ofpackets that are made up of smaller data cells. A packet is a unit ofdata that is routed between a source and a destination on apacket-switched network. When a file (e.g., e-mail, graphics, etc.) issent from one place to another on a network, the file is divided intosuch smaller packets making them more efficient for transmission. Theindividual packets for a given file may travel different routesthroughout networks with each packet containing both data andtransmission information associated with the routing of data. As such, apacket may be described as having a payload containing the data, and oneor more headers that contain the routing information (e.g., adestination address).

[0004] When all the packets have arrived at a destination, they arereassembled into the original file at the receiving end. Such a packetswitching scheme is an efficient way to handle transmission on aconnectionless network This is in contrast to a circuit switching schemewhere a connection (e.g., a voice connection) requires the dedication ofa particular path for the duration of the connection.

[0005] A router is a device (e.g., hardware, firmware, software) thatdetermines the next network segment to which a packet should beforwarded towards its destination. A router may be positioned at pointswithin a network or where one network meets another, referred to as agateway. A router may create and maintain tables of the available routesand their conditions for use with other information to determine thebest route for a given packet. Typically, a packet may travel through anumber of network points having routers before arriving at itsdestination.

[0006] When a data packet arrives at the input of a router, severallookups may be performed to determine the subsequent handling of thepacket, as illustrated in FIG. 1. The lookups may include, for examples,where to send the packet next (Next Hop), the quality of servicerequirement (QoS), the Ethernet port address, etc. Consider, forexample, a packet arriving at Router-A. Router-A needs to determinewhether the packet is destined for local servers connected directly toRouter-A, or if the packet should go to the next router on a route(Router-B) to a destination. Additionally, Router-A may assign apriority based on the destination address (DA) and the source address(SA) of the packet.

[0007] The packet header may first be parsed or processed to get thevalues from different fields (e.g., SA, DA, protocol type, QoS, etc) inorder to perform the various lookups. A packet classification lookup,for example, may be performed using SA, DA and other relevant fields inthe packet header. The Next Hop lookup, for example, may also beperformed to determine whether the packet is meant for local servers orfor Router-B. If the packet is destined for Router-B, the packet is thenput in a queue for Router-B. If the packet is destined for a localserver (e.g., Server-1 or Server-2), then a media access control (MAC)lookup is performed to send the packet to the appropriate server. In thepreceding example, three lookups are necessary for sending the packet onits way: Packet Classification, Next Hop, and MAC. However, often thereare other lookups performed on the packet header, with the number oflookups exceeding five or more.

[0008] Routers may use processors and content addressable memory (CAM)devices to perform the various lookups on packets. As opposed to arandom access memory (RAM) device, in which information is accessed byspecifying a particular memory location address, the data stored in aCAM is accessed by the contents of the data. More specifically, insteadof using an address to access a particular memory location, a CAM uses akey that contains a portion of the desired contents of a particularmemory cell in the memory device. The CAM can be instructed by aprocessor to compare the key, also referred to as comparand data (e.g.,packet header data) with data stored in its associative memory array, asillustrated in FIG. 2. The CAM simultaneously examines all of itsentries and selects the stored data that matches the key.

[0009] When the entire CAM device, or blocks thereof, is searchedsimultaneously for a match of the stored data with the key comparanddata, the CAM device indicates the existence of a match by asserting amatch flag. Multiple matches may also be indicated by asserting amultiple match flag. The CAM device typically includes a priorityencoder to translate the matched location into a match address or CAMindex and outputs this address to a status register so that the matcheddata may be accessed. The priority encoder may also sort out whichmatching memory location has the top priority if there is more than onematching entry.

[0010] Data may be represented in the form of strings of binary digits(“bits”) having a low (“0”) logic state and a high (“1”) logic state.Different types of CAMs may be used with different data formats. Abinary CAM is designed to operate with “0” and “1” states, while aternary CAM is designed to operate with “0”, “1”, and “don't care”states. The bits may be organized into groups such as a word (e.g., 64or 72 bits wide) and stored in different segments of a CAM. The keysused for different data fields may have different word sizes, forexample, the key for a Classification lookup may be 128 bits wide andthe key for a Next Hop lookup may be 32 bits wide.

[0011] A router may include multiple CAMs, with each CAM having adifferent table or, alternatively, a single CAM having multiple blocksfor each of the different tables, for performing the different lookups.For example, a router may include a 32 bit wide Next Hop CAM, a 128 bitClassification CAM, and a 48 bit MAC CAM. With routers having multipleCAMs, each of the multiple CAMs are typically connected to common busesthat are used to communicate the various keys and other input and outputdata with each of the CAM devices. Similarly, with routers having asingle CAM with multiple blocks, each of the blocks is accessed usingcommon buses. Thus, lookups are typically performed sequentially beforea packet is processed (e.g., routed to the next destination orclassified). Because the buses are shared with so many input and outputfunctions of all the CAMs or CAM blocks, many clock cycles are requiredto multiplex data on the bus. This generally limits the search rate andoverall throughput of conventional CAM devices. As the number of ports,segments, or devices that are supported by routers and as the number oflookups increase, conventional CAM devices and architectures canundesirably limit the system's overall throughput.

SUMMARY OF THE INVENTION

[0012] The present invention pertains to a method and apparatus forconcurrent searching of different tables in a content addressable memoryarray.

[0013] In one embodiment, the apparatus includes a plurality of contentaddressable memory blocks each coupled to a corresponding filtercircuit. Each of the filter circuits is configured to receive a commoninput string and transmit a filtered comparand string as comparandinformation to its content addressable memory block. The filtercomparand strings may be compacted.

[0014] Other features and advantages of the present invention will beapparent from the accompanying drawings, and from the detaileddescription, which follows below.

BRIEF DESCRIPTION OF THE DRAWINGS

[0015] The present invention is illustrated by way of example and notintended to be limited by the figures of the accompanying drawings.

[0016]FIG. 1 is a conceptual illustration of packet handling by arouter.

[0017]FIG. 2 illustrates one embodiment of a CAM device.

[0018]FIG. 3 illustrates one embodiment of a line card or blade of arouter having a CAM device configured to perform concurrent lookups.

[0019]FIG. 4A illustrates one embodiment of a multiple block CAM devicehaving input string filtering circuits.

[0020]FIG. 4B illustrates one embodiment of filtering circuits in amultiple block CAM device.

[0021]FIG. 5A illustrates one embodiment of an input string.

[0022]FIG. 5B is a conceptual illustration of the operation of CAMdevice using particular packet header segments from the input string ofFIG. 5A.

[0023]FIG. 6 is a conceptual illustration of one embodiment of thefiltering and compacting of an input string.

[0024]FIG. 7 is a conceptual illustration of one embodiment of bitmanipulation for the filtering and compacting of an input string.

[0025]FIG. 8 illustrates one method of programming a filter circuit suchthat it can filter and compact an input string.

[0026]FIG. 9 illustrates one embodiment of cross-bar switch.

[0027]FIG. 10 illustrates one embodiment of a memory storage element ofthe cross-bar switch of FIG. 9.

[0028]FIG. 11 illustrates one embodiment of a filter circuit.

[0029]FIG. 12 illustrates one embodiment of the address generator ofFIG. 11.

[0030]FIG. 13 illustrates another embodiment of the address generator ofFIG. 11.

[0031]FIG. 14 illustrates another embodiment of a filter circuit.

[0032]FIG. 15 illustrates one embodiment of a data generator coupled toa block filter register.

[0033]FIG. 16 illustrates an example of using the embodiment of FIG. 15.

[0034]FIG. 17 illustrates ten matrix connections for a cross-bar switchbased on the exemplary bit pattern in a block filter register.

[0035]FIG. 18 illustrates an alternative embodiment of a data generatorcoupled to a block filter register.

[0036]FIG. 19 illustrates one embodiment of block filter registercoupled to a sense amplifier.

[0037]FIG. 20 illustrates one embodiment of a cross-bar switch.

[0038]FIG. 21 illustrates another embodiment of a filter circuit.

[0039]FIG. 22 illustrates one embodiment of the data generator of FIG.21 coupled to OR logic and a block filter register

[0040]FIG. 23 illustrates another embodiment of cross-bar switch.

DETAILED DESCRIPTION

[0041] In the following description, numerous specific details are setforth such as examples of specific, components, circuits, processes,etc. in order to provide a thorough understanding of the presentinvention. It will be apparent, however, to one skilled in the art thatthese specific details need not be employed to practice the presentinvention. In other instances, well known components or methods have notbeen described in detail in order to avoid unnecessarily obscuring thepresent invention.

[0042] Embodiments of the present invention include various methodsteps, which will be described below. The steps may be performed byhardware components or may be embodied in machine-executableinstructions, which may be used to cause hardware components (e.g., aprocessor, programming circuit) programmed with the instructions toperform the steps. Alternatively, the steps may be performed by acombination of hardware and software.

[0043] Embodiments of the present invention may be provided as acomputer program product, or software, that may include amachine-readable medium having stored thereon instructions. The machinereadable medium may be used to program a computer system (or otherelectronic devices) to generate articles (e.g., wafer masks) used tomanufacture embodiments of the present invention. The machine-readablemedium may include, but is not limited to, floppy diskettes, opticaldisks, CD-ROMs, and magneto-optical disks, ROMs, RAMs, EPROMs, EEPROMs,magnet or optical cards, flash memory, or other type ofmedia/machine-readable medium suitable for storing electronicinstructions.

[0044] The machine readable medium may store data representing anintegrated circuit design layout that includes embodiments of thepresent invention. The design layout for the integrated circuit die maybe generated using various means, for examples, schematics, text files,gate-level netlists, hardware description languages, layout files, etc.The design layout may be converted into mask layers for fabrication ofwafers containing one or more integrated circuit dies. The integratedcircuit dies may then be assembled into packaged components. Designlayout, mask layer generation, and the fabrication and packaging ofintegrated circuit dies are known in the art; accordingly, a detaileddiscussion is not provided.

[0045] The method and apparatus described herein provides for thefiltering of a common input string to generate one or more filteredcomparand strings. In one embodiment, the filtering of a common inputstring enables concurrent lookups in different CAM tables to beperformed on multiple filtered comparands by different CAM devices (ordifferent blocks of a CAM device), to compare the data in the filteredcomparand strings with data stored in its associative memory. Byperforming multiple lookups in parallel, rather than sequentially,packet throughput (e.g., in a router) may be significantly increased.

[0046] The common input string, including multiple comparand or searchkey information, may be formed by a controller unit such as a networkprocessor or a central processing unit. In one embodiment, the commoninput string may include one or more packet headers, or portionsthereof. The input string may include various routing data in fieldsegments of the input string that may be used to determine thesubsequent handling of the packet, for example, Classification, NextHop, and MAC. The same input string is passed through different filtercircuits. The filter circuits may be preprogrammed to selectively allowone or more segments of the common input string to pass as filteredcomparand data to one or more CAM tables.

[0047] In one embodiment, the filtering may be performed on a bit basis,where specific predetermined bits are selected from the common inputstring to generate filtered string segments. The filtered stringsegments may also he shifted to appropriate bit positions to compact thefiltered string segments into a compacted filtered comparand string. Thedifferent compacting and/or filtering operations performed on the inputstring may be performed in parallel, rather than sequentially, such thata filtering operation may be started before another filtering operationis completed. Each of the filtered comparand strings may then beprovided to the CAM device blocks. In this manner, all of the CAM deviceblocks may perform concurrent lookups. Alternatively, the filteringand/or compacting may be performed sequentially and be completed beforeor performed concurrently with subsequent lookups.

[0048] In one embodiment, the filtering and compacting operations may beperformed by multiple cross-bar switches that are each under the controlof a corresponding programming circuit. The input string is transmittedin parallel to all of the cross-bar switches. Each cross-bar switch maybe pre-programmed by its corresponding programming circuit to filter andcompact different segments of the input string to generate multiplecompacted, filtered comparand strings. The multiple, filtered comparandstrings can then be used to perform different lookups using differenttables. The compacted, filtered comparand strings may be continuouslyfilled without any gaps between bits. The programming circuit includes,for one example, an address generator, a block filter register, and adata generator. In one embodiment, the cross-bar switches and/or theblock filter registers may be implemented with random access memory(RAM) devices.

[0049]FIG. 3 illustrates one embodiment of a line card or blade of arouter having a CAM device configured to perform concurrent lookups.Line card 300 includes processor 310, ingress interface circuitry 330,egress interface circuitry 340, CAM device 320, associated data storageunit 370, traffic manager 360, and payload storage unit 350.

[0050] Processor 310 functions to control the overall operation of linecard 300 in cooperation with the other components of line card 300. Forexample, processor 310 receives packets from a network medium throughingress interface circuitry 330, stores the payload of packets inpayload storage unit 350, and processes packet header information todetermine required lookups in CAM device 320 and subsequent handling ofthe packets, as discussed herein. Ingress circuitry includes, forexample, PHY and MAC devices. Processor 310 sends out packets on anetwork medium through egress interface circuitry 340 based on thelookups performed by CAM device 320. Egress interface circuitry 340 maybe connected to a switch fabric or directly to one or more other routersor switches. Processor 310 may be one or more network processor units(NPUs), microprocessors, or one or more special purpose processors suchas a digital signal processor (DSP). In another embodiment, processor310 may be another type of controller, for example, a field programmablegate array or a general purpose processor. The processor 310, ingressinterface circuitry 330, and egress interface circuitry 340 componentsof a router are known in the art; accordingly, a detailed discussion isnot provided.

[0051] In response to information in a packet header, for a particularpacket, processor 310 determines the number and types of lookups to beperformed by one or more of CAM devices 320, and forms the search keysfor these lookups. The searches or lookups may include, for example,Classification lookups, forwarding lookups (e.g., Next Hop or longestprefix match (LPM) lookup, MAC lookup, MPLS lookup, etc.). When multiplesearches are required, processor 310 forms a composite search key thatincludes at least two, and as many as all, of the various search keysfor the lookups. The composite search key is provided as a common inputstring to CAM device 320. CAM device 320 selectively identifies andextracts the individual search keys from the common input string andprovides the individual search keys to the associated CAM blocks toperform the lookups. Advantageously, the lookups can then occurconcurrently or simultaneously in the CAM blocks of CAM device 320,thereby increasing overall throughput over conventional systems in whichsearches are processed sequentially.

[0052] CAM device 320 may be a multiple block CAM device with each blockcapable of storing a different table for comparand lookups, as discussedbelow in relation to FIGS. 4A and 4B. Alternatively, CAM device 320 mayrepresent multiple, single block CAM devices (e.g., with each singleblock CAM device formed on a different integrated circuit substrate)with each CAM device used to store a different table for comparandlookup. After one or more lookups are executed in CAM device 320,associated information for matching entries (e.g., additional routinginformation and/or packet information) may be retrieved from associateddata unit 370. Processor 310 then communicates with traffic manager 360to schedule the exit of a packet from line card 300 via egress interfacecircuitry 340.

[0053]FIG. 4A illustrates one embodiment of a multiple block CAM devicehaving input string filter circuits. CAM device 400 may be CAM device320 of FIG. 3. As discussed above in relation to CAM 320 of FIG. 3, ablock may be an entire array or a portion of a larger array. In oneembodiment, CAM device 400 includes multiple block memory arrays (Nblocks) with each block storing a different lookup table or portions ofone or more common lookup tables (e.g., block 0 and block 1 may storeone lookup table and blocks N−3 to N−1 may store a different lookuptable). Although five blocks 410-414 are shown for ease of illustration,CAM device 400 may have more or less than five blocks. Each of blocks410-414 is coupled to a filter circuit 420-424, respectively. Each offilter circuits 420-424 is configured to receive a common input string405 and filter, extract or remove from input string 405 one or moresegments that will be used to perform a lookup. In an alternativeembodiment, CAM device 400 may include multiple, single block CAMdevices instead of a single, multiple block CAM device as shown in FIGS.4A and 4B. Each filter circuit may also compact the extracted searchinformation to form a contiguous bits that participate in a compare withdata stored in the corresponding CAM block.

[0054] Each of the filter circuits 420-424 may have dedicated filterfunctions. Alternatively, each filter circuit may be programmable todynamically select one or more segments or bits of input string 405.

[0055] In one embodiment, illustrated in FIG. 4B, each of filtercircuits 420-424 includes a cross-bar switch (XBAR) and a programmingcircuit (PGM). For example, filter circuit 420 includes cross-bar switch430 and programming circuit 440. Programming circuit 440 may be used topre-program cross-bar switch 430 to filter out particular field segmentsof input string 405 and shift bit positions of the field segments tocompact the filtered string segment into a compacted, filtered comparandstring. It should be noted that one or more of filter circuits 420-424need not contain a programming circuit. For example, one or more of thecross-bar switches may be configured for external device access anddirect programming (e.g., by processor 310 of FIG. 3). Programmingcircuits in the CAM device 400 may be included as an added convenienceto the user.

[0056] Programming circuit 440 is configured to receive filter data(FDATA) via data line(s) 491, that is used to directly or indirectlyprogram the cross-bar switch 430 to generate a particular filteredcomparand string from common input string 405. Programming circuit 440may also be configured to receive one or more control signals viacontrol line(s) 492 and one or more clock signal(s) via line 493 from aclock generator (not shown) to control the operation of the programmingcircuit, as discussed in detail below.

[0057] It should be noted that filter circuits 421-424 may operate in amanner similar to that discussed for filter circuit 420. Each of filtercircuits 420-424 may select a different segment, or combination ofsegments, of the common input string 405 where each block stores adifferent table. Alternatively, one or more filter circuits may selectthe same segment, or the same combination of segments, of the commoninput string 405 when, for example, corresponding CAM blocks storeportions of the same lookup table. As such, each of cross-bar switches430-434 may be pre-programmed by its corresponding programming circuit440-444, respectively, to filter appropriate field segments of the inputstring. All resulting filtered comparand strings may then beconcurrently compared with their respective lookup tables stored in thecorresponding CAM block. For example, the filtered comparand stringgenerated by filter circuit 420 is compared with the lookup table storedin block 410, while filtered comparand string generated by filtercircuit 421 is compared with the lookup table stored in block 411.

[0058] In an alternative embodiment, the filtering of common inputstring 405 to generate the filtered comparand strings or search keys maybe accomplished sequentially. The lookups in the blocks may also beperformed concurrently or sequentially.

[0059]FIG. 5A illustrates one embodiment of an input string. In oneembodiment, input string 405 may include field segments parsed orprocessed from one or more packet headers 510 and 520. When dataprocessing systems (e.g., routers, clients, servers) exchange data overa network, the procedure involves the use of protocols by which thesesystems agree on how to communicate with each other. To reduce designcomplexity, networks may be organized as a series of layers. The numberof layers and the function of each layer varies from network to network.

[0060] For example, where a transmission control protocol (TCP)/Internetprotocol (IP) is used, it is organized into multiple layers including anetwork access layer and an Internet layer. The network access layeruses a TCP to enable the exchange of data between an end system and anetwork. An Internet layer uses an IP to enable data to transversemultiple interconnected networks. Each of these protocols use packetheaders containing routing information, as discussed above. For example,TCP packet header 510 includes a source address (SA) port segment 552and a destination address (DA) port segment 553, and IP packet header520 includes a SA segment 554, a DA segment 555, a type of service (ToS)segment 551, and a protocol type segment 556.

[0061] In one embodiment, for example, processor 310 of FIG. 3 may beused to parse certain segments from packet headers 510 and 520 togenerate input string 405 and transmit the input string to CAM device320. For example, input string 405 may include MAC segment 557, TOSsegment 551, SA port segment 551, DA port segment 552, SA segment 554,and DA segment 555. Alternatively, input string 405 may include more orless than the segments illustrated. Each of filter circuits (illustratedin FIGS. 4A and 4B) may then filter out the bit values of differentfield segments of input string 405 to generate different filteredcomparand strings to concurrently perform different lookups in the CAMblocks. In an alternative embodiment, processor 310 may transmitas-received unparsed header segments to CAM device 320.

[0062]FIG. 5B is a conceptual illustration of the operation of CAMdevice 400 using the packet header segments for input string 405 thatare illustrated in FIG. 5A. For example, CAM device 400 may includethree CAM blocks 410, 411, and 412. Each block 410, 411, and 412 iscoupled to a corresponding filter circuit 420, 421, and 422,respectively. Each of filter circuits 420-422 is configured to receiveinput string 405 and process the received input string 405.

[0063] In one embodiment, filter circuits 420-422 may be pre-programmedto filter particular field segments of the input string 405 in order toperform concurrent lookups on the various tables stored in blocks410-412. For example: filter circuit 420 may be preprogrammed to filterMAC segment 557 resulting in filtered comparand string 580; filtercircuit 421 may be preprogrammed to filter DA segment 555 resulting infiltered comparand string 581; and filter circuit 422 may bepreprogrammed to filter SA segment 554, DA field segment 555 and TOSsegment 551 resulting in filtered comparand string 582. By filteringdifferent field segments from a common input string 405, in parallel,each of filtered comparand strings 580-581 may then be used toconcurrently perform the various lookups. For example: filteredcomparand string 580 may be used to perform a MAC lookup in CAM block410; filtered comparand string 581 may be used to perform a Next Hop(e.g., LPM) lookup in CAM block 411; and filtered comparand string 582may be used to perform a Classification lookup in CAM block 412. Assuch, if each lookup individually requires X clock cycles to perform,only a total of X clock cycles may be required to perform all threelookups because the lookups are performed concurrently. In this manner,packet throughput in a router may be significantly increased overrouters utilizing prior CAM architectures.

[0064]FIG. 6 is a conceptual illustration of one embodiment of thefiltering and compacting of an input string. As previously discussed,input string 405 may be part, or all, of a header of a packet or mayinclude field segments from other parts of a packet or other processedinformation. Input string 405 is passed through a filter 620 that masksout, or blocks, undesired field segments of input string 405. The outputof filter 620 is one or more filtered string segments 629. For example,four string segments X₁, X₂, X₃, and X₄ may be filtered through filter620. The strings segments X₁, X₂, X₃, and X₄ may correspond to, forexample, DA, SA, Type of Service (ToS), and protocol type. The filteringof input string 405 may be performed by one or more of filter circuits420-424, with each of filter circuits 420-424 programmed to filterdifferent field segments of input string 405 or one or more of the samefield segments. The filtering of input string 405 may be performed on abit basis. Alternatively, the filtering of input string 405 may beperformed based on other sizes, for example, a byte size. Moreover, eachof filter circuits 420-424 may be re-programmed to filter differentfield segments of input string 405 from a prior programmed state.

[0065] As shown in FIG. 6, the filtered string segments (X₁, X₂, X₃, andX₄) 629 may not be adjacent to each other. Such non-adjacent filteredstring segments may be shifted to generate a compacted filtered string639. Where the filtering is performed, for example, on a bit basis, afilter circuit (e.g., filter circuit 420) moves the bits of the filteredstring segments 629 to generate filtered comparand string 639. In oneembodiment, for example, all of the bits of filtered string segment 629are shifted to the lowest positions. Alternatively, the bits of filteredstring segments 629 may be shifted in other manners, for example, to thehighest positions.

[0066]FIG. 7 is a conceptual illustration of one embodiment of bitmanipulation for the filtering and compacting of an input string using across-bar switch 720 (e.g., cross-bar switch 430). The cross-bar switch720 includes an n by n matrix of intersections, where n is the bit widthof input string 405 and also the bith width of the output string. Eachof the diamonds (e.g., diamond 721) represents an intersection, andpossible connection, for an input bit IN(0)-IN(n−1) and an output bitY(0)-Y(n−1) of the filtered comparand string. One or more intersectionsis selected by an address, and crossbar switch 720 is programmed byprogram data (PDATA) to select and translate or compact predeterminedbits from input string 405 to output bit positions of the compactedfiltered comparand string. The address and/or PDATA may be generated bya program circuit (e.g., program circuit 440 of FIG. 4B), or externally(e.g., by processor 310 of FIG. 3).

[0067] Line 722 across the diagonal of filter circuit represents aone-to-one connection correlation between the bit positions of an inputstring 405 and an output filtered comparand string 639. The selected orprogrammed bits, pictorially the “+” encapsulated in a circle, (e.g.,connection 723 of FIG. 7) represent a programmed bit for making aconnection between an input bit position and an output bit position.Each connection is established by programming one or more circuitelements at the intersections. Programming of an intersection may beaccomplished using various means including writing the state of a memorycell, blowing a fuse or other connection, leaving a connection intact,and the like. For example, when a memory element is used to establishconnections at an intersection, a connection may be established bywriting a first logic state (e.g., a logic “1”) to the memory element,and no connection may be established by writing a second logic state(e.g. a logic “0”) to the memory element.

[0068] Cross-bar switch 720 is programmed to avoid bit gaps in theresulting filtered comparand string 639 that is output by filter circuit720. In the illustrated example, all of the selected bits of inputstring 405 are shifted to the lowest bit positions. The resultingfiltered comparand string 639 may, thus, have significantly fewer bitpositions than the input string 405. For example, the input string 405may be 288 bits wide (n=288), whereas the filtered comparand string 639may be only 72 or 144 bits wide. The number of intersections in thecross-bar switch may be reduced to match the number of output bits.Advantageously, the lookup entries in each of the CAM blocks 410-414 maybe significantly smaller than the size of input string 405. Thus, anarrower CAM array (i.e., having fewer bits per row than the totallength of the common input string) may be used. The compacted filteredstring may also have desirable power savings as the unused columns of aCAM array may be globally masked by a global mask circuit (not shown)and, thus, draw or dissipate minimal or substantially low power during asearch operation. Global masks are known in the art; accordingly, adetailed discussion is not provided herein.

[0069] The illustration of FIG. 7 describes a programmed cross-barswitch that compacts or translates input data from higher bit positionsto lower bit positions in the output data string. Alternative filtersmay compact or translate input data from lower bit positions to higherbit positions in the output string. Additionally, the filtered stringneed not be compacted, and the filtered string with gaps, if any, may beprovided to a CAM block or table for look-up. The unused bits in thesearch key provided to the CAM block may be globally masked by a globalmask register.

[0070] It should be noted that the size of the filtered comparand stringgenerated by cross-bar switch 720 may be smaller than input string 405even if the selected bits on the input string 405 are contiguous. Forexample, if the bits of input string 405 to be selected correspond torows 0 to row 2, the output bits would not need to be shifted, becausethe selected rows are contiguous. As such, even when the desired bits ofinput string 405 are contiguous, the size of the resulting filteredcomparand string 639 may also be smaller than the size of input string405 as a whole.

[0071]FIG. 8 illustrates one method of programming a filter circuit suchthat it can filter and compact an input string. The method may beperformed, for example, by programming circuit 440 of FIG. 4B or byprocessor 310 of FIG. 3. The method may commence in response to anexplicit program instruction or control signal provided to the CAMdevice, upon reset, or in response to other stimulus. In one embodiment,gaps in resulting output string 639 may be avoided by continuallysequencing through input bits and determining whether the input bitshould be provided as a particular output bit.

[0072] Programming starts at step 802. A determination is made at step804 whether a particular input bit should be provided to a particularoutput bit position (e.g., as determined by FDATA provided to programcircuit 440 of FIG. 4B). If so, an appropriate connection is establishedor programmed in the cross-bar switch at step 806. If this is not thelast input bit, step 808, the method moves to the next input bits, step810, and repeats step 804. When all of the input bits have beenprocessed, the process is complete, step 812.

[0073] Any type of cross bar switch may be used for cross-bar switch 430of FIG. 4. FIG. 9 illustrates cross-bar switch 1000 that is oneembodiment of cross-bar switch 430. Cross-bar switch 1000 includes anarray of rows and columns of memory storage elements 1010 coupled to thegates of transistors 1020. Each memory storage element/transistor pairis positioned at the intersection of a row and column, and is used toestablish (or not establish) a connection between input signalsIN(0)-IN(n−1) and output signals Y(0)-Y(n−1). Input signals IN representthe input string data (e.g., input string 405 of FIG. 4A), and outputsignals Y represent filtered output string provided to a CAM block ortable.

[0074] Each memory storage cell 1010 stores a state that indicateswhether a connection is established at a particular row and columnintersection in switch 1000. The memory storage cells may be any type ofmemory including, random access memory (RAM) cells (both static anddynamic), read only (ROM) cells, and other volatile or nonvolatilememory storage cells. The memory storage cells may be programmed orwritten to using any write circuitry appropriate for the memory storagecell type. If the memory storage cell stores a logic “1” state, theassociated transistor 1020 is enabled to let an input signal IN on oneof the signal lines 1030(0)-1030(n−1) to pass to one of the outputs Y onone of the signal lines 1040(0)-1040(n−1). The output signal lines 1040may also be pre-charged to predetermined or default states by prechargecircuits 1050. Precharge circuits 1050 may be any well-known circuits.

[0075] Cross-bar switch 1000 is a full cross-bar switch that enables anyinput to be connected to any output Y. For alternative embodiments, onlya portion of the crossbar switch 1000 may be needed such as when aninput string is compacted. For example, when compacting the input stringfrom higher bit positions to lower bit positions in the output string,the corresponding circuitry of the cross-bar switch for translatinglower bit positions to higher bits positions may be removed from a fullcross-bar switch. Similarly, when compacting the input string from lowerbit positions to higher significant bit positions in the output string,the corresponding circuitry of the cross-bar switch for translatinghigher bit positions to lower significant bits positions may be removedfrom a full cross-bar switch. Exemplary embodiments of modifiedcross-bar switches are discussed below.

[0076]FIG. 10 illustrates memory storage cell 1100 that is oneembodiment of memory storage cell 1010. Cell 1100 includes cross-coupledinverters 1130 and 1140 that form a bi-stable latch for storing data atnodes 1180 and 1190. Pass gates 1150 and 1160 allow program data (andread data) to be communicated with the storage nodes when the word linesignal on signal line 1110 is active. Node 1180 is coupled to the gateof transistor 1020. Reset transistor 1170 may also be included to pullnode 1180 to a predetermined state of logic “0” when the reset signalReset on signal line 1120 is activated. Reset transistor 1170 has itsgate coupled to signal line 1120, its drain coupled to node 1180, andits source coupled to ground.

[0077]FIG. 11 illustrates filter circuit 1200 that is one embodiment ofone of the filter circuits 420-424 of FIG. 4A. In this embodiment,filter circuit 1200 includes a cross-bar matrix switch 430 and aprogramming circuit 1204. In one embodiment, a full cross-bar switch(e.g., cross-bar switch 1000 of FIG. 9) may be used for cross-bar switch430. In an alternative embodiment, a full cross-bar switch may bemodified to provide only required connection capability, therebyreducing the size of the cross-bar switch.

[0078] In this embodiment, programming circuit 1240 includes programdata generator 1208 and address generator 1206. Program data generator1208 generates programming data PDATA to program one or more of theintersections of cross-bar switch. PDATA is generated in response tofilter data FDATA that indicates which input bits are to be included inthe output string, and whether and how the inputs bits are to becompacted or translated in the output string. FDATA may be provided, forexample, by processor 310 of FIG. 3. Address generator 1206 is coupledto cross-bar switch 430. In an alternative embodiment, address generator1206 may also be coupled to program data generator 1208. Addressgenerator 1206 operates to access one or more intersections of cross-barswitch 430 for programming. Address generator 1206 may include, forexample, one or more row and/or column decoders to select one or morerows or columns of intersections in the cross-bar switch forprogramming, or to select a single intersection or other groups ofintersections for programming.

[0079] In one embodiment, address generator 1206 includes a decoder 1304controlled by an address counter 1302 as illustrated in FIG. 12. Addresscounter 1302 is configured to sequence decoder 1304 through the rows orcolumns of cross-bar switch 430 by activating the signals on signallines 1306(0)-1306(n−1) coupled to the cross-bar switch 430. Counter1302 increments or decrements its count to select a new row or column inresponse to the clock signal CLK and an enable signal ENABLE that isactivated for programming. The ENABLE signal may be controlled byprogram data generator 1208 (e.g., in response to FDATA), or maycontrolled externally (e.g., by processor 310 of FIG. 3). Alternatively,address generator 1206 may have other components, for example, a shiftregister 1402 to sequence through the rows and/or columns of cross-barswitch 430 as shown in FIG. 13. Address generators, address decoders,registers, and counters are known in the art; accordingly, a detaileddiscussion is not provided.

[0080]FIG. 14 illustrates program data generator 1502 that is oneembodiment of program data generator 1208 of FIG. 11. Program datagenerator 1502 includes write buffer circuit 1504, data generator 1506,and block filter register (BFR) 1508. Data generator 1506, BFR 1508 andaddress generator 1206 may optionally receive one or more clock signalsCLK as shown as a dashed line in FIG. 14.

[0081] Block filter register 1508 stores the particular filter dataFDATA that is used to filter input string 405 to obtain a desiredfiltered comparand string. Block filter register 1508 may be programmed(e.g., by processor 310 of FIG. 3) with a particular “1” and “0” bitpattern based on the desired filtering of input string 405. As such,each of the block filter registers within filter circuits 420-424 maystore a different bit pattern in order to filter different bits from thecommon input string 405 that is applied to all filter circuits 420-424.Alternatively, a block filter register may store the same bit pattern asother block filter registers. In another embodiment, multiple blockfilter registers may be used in a single program generator 1502 andselectable (e.g., by processor 310 of FIG. 3, or by other elements) toprovide the appropriate FDATA.

[0082] Block filter register 1508 is coupled to data generator 1506.Data generator 1506 generates the PDATA bit pattern that is loaded intowrite buffer circuit 1504 to selectively program intersections withincross-bar switch 430. Write buffer circuit 1504 operates to buffer thedata programmed to cross-bar switch 430. In one embodiment, write buffercircuit 1504 may be part of data generator 1506. Write buffer circuitsare known in the art; accordingly, a detailed discussion is notprovided.

[0083] For one embodiment, there are as many bits of FDATA loaded intoBFR 1508 as there are bits in the input data string. A particular bit ofFDATA indicates whether the corresponding bit position in the inputstring will be present in the output string. In this manner, the FDATAin BFR 1508 operates as a mask to filter certain input bits from beingprovided on the output sting to the CAM block. The masking provided bythe FDATA allows data generator 1506 to generate the appropriate PDATAfor cross-bar switch 430 such that switch 430 will filter and compactthe input string appropriately.

[0084] In one exemplary illustration of the operation of program circuit1204, address generator 1206 is configured to initially select a firstrow of cross-bar switch 430. Data generator 1506 programs aninterconnection for the selected row and a particular column if thecorresponding FDATA bit stored in block filter register 1508 has a “1”stored in the bit position corresponding to that row/column location. Ifthe FDATA bit stored in block filter register 1508 stores a “0” in thebit position corresponding to that row/column location, then datagenerator 1506 programs a “0” into the row and columns interconnectssuch that no connections are established for that input row. Addressgenerator 1206 then sequences through the rest of the rows and theadditional FDATA bits in the block filter register further determinewhether connections are established. For one embodiment, addressgenerator 1206 sequences through the rest of the rows and conditionallysequences through the columns as determined by the FDATA. For anotherembodiment, address generator 1206 conditionally sequences to a new rowand continually sequences through the columns as determined by FDATA.

[0085]FIG. 15 illustrates data generator 1606 and BFR 1608 that areembodiments of data generator 1506 and BFR 1508, respectively. Datagenerator 1606 includes shift register 1610, logic circuit 1620, andlogic gate 1605. Shift register 1610 includes n+1 bits of data whereinthe first n bits are initially all logic “0” and the n+1 bit is set to alogic “1”. Shift register 1610 is a looped shift register such that the“1” preloaded in the n+1 bit position is shifted through the other bitpositions of shift register 1610 based on the output of AND gate 1605.As such, at any given time, only one bit position in shift register 1610contains a logic “1” while the other bit positions contain a logic “0.”

[0086] BFR 1608 is also a shift register and stores n bits of FDATA.Each bit of FDATA stored in BFR 1608 is clocked out to one input of ANDgate 1605 by CLK on signal line 1695. AND gate 1605 also receives CLKand, in response to a logic “1” on both FDATA input and CLK, enablesshift register 1610 to shift its contents left by one bit. Thus, theFDATA stored in BFR 1608 determines whether shift register 1610 shiftsits contents. Note that, shift register 1610 and BFR 1608 may beconfigured to receive different clock signals. Also note that the outputof AND gate 1605 may also be latched or registered prior to signallingto shift register 1610 and logic circuit 1620.

[0087] Each bit in shift register 1610 is also coupled to one input ofAND gates 1601(0)-1601(n−1 of logic circuit 1620. The other input of theAND gates 1601 (0)1601-(n−1) are coupled to receive the output of ANDgate 1605. When CLK is low (i.e., a logic “0” state), the AND gates 1601output a logic “0”. When CLK is high (i.e., a logic “1” state), the ANDgates 1601 output the bit contents received from shift register 1610.With such a configuration, logic circuit 1620 either outputs all “0”s orthe bit contents of shift register 1610. The signals output from ANDgates 1601(0)-1601(n−1 are output to signal lines 1603(0)-1603(n−1,respectively, and are coupled to write buffer circuit 1504 of FIG. 14.The write buffer circuit 1504, in turn, provides this data as PDATA tothe cross-bar switch to establish row and column connections therein.

[0088] As noted above, logic circuit 1620 either outputs all logic “0”sor the contents of shift register 1610 as the PDATA to program aconnection in cross-bar switch 430. When a row of cross-bar switch 430is selected by address generator 1206, the row is either programmed withall logic “0”s such that no input bit to output bit location isestablished, or a single bit for the row is programmed to establish aconnection. Address generator 1206 then sequences to the next row. ThePDATA output by logic circuit 1620 is then updated as indicated by theFDATA in BFR 1608. If the next FDATA bit is a logic “0” state, noconnection is made for the next row; however, if the next FDATA bit is alogic “1” state, a connection is programmed. In this manner, datagenerator 1606 and BFR 1608 are able to program cross-bar switch 430 tofilter the input string and further compact the string. A specificexample is shown in FIG. 16.

[0089] In FIG. 16, shift register 1610 has 11 bit positions (n=10) andBFR 1608 has ten bit positions. BFR 1608 is illustrated with anexemplary bit pattern that may be used to establish certain connectionsin cross-bar switch 430 to filter and compact bits of input string 405.In this example, BFR 1608 stores FDATA having a “1” in bit positions1681, 1682, 1685, 1686, 1689 and 1690. In order to mask out bits frominput string 405, a “0” is stored in bits positions 1683, 1684, 1687,and 1688.

[0090] Initially, address generator 1206 of FIG. 14 selects a row (orcolumn) of intersections in cross-bar switch 430 to determine whetherthe first input bit position IN(0) will be coupled to the correspondingfirst output bit position Y(0). In the first clock cycle of CLK, the “1”from bit position 1681 from BFR 1608 is provided to AND gate 1605. Sincebit position 1681 has a “1”, on the next clock cycle the “1” in bitposition 1650 is shifted into bit position 1640 of shift register 1610.Subsequently, AND gates 1601(9)-1601(0) output 0000000001, respectively,as PDATA to the cross-bar switch 430 (via write buffer 1504) toestablish a connection between IN(0) and Y(0) at the intersection ofcolumn 0 and row 0 of the switch matrix, as illustrated by the “+” inthe row 0 and column 0 intersection of FIG. 17. Since AND gates1601(1)-1601(9) output “0”s to other possible interconnections of rowzero and other columns, no connections are established for thoseintersections.

[0091] Subsequently, address generator 1206 selects a second row (row 1)in cross-bar switch 430 to determine whether the second input bitposition IN(1) will be coupled to either the first or second output bitpositions Y(1) and Y(0), respectively. On a subsequent clock cycle ofCLK, another shift and program operation is performed by shift register1610 and logic circuit 1620, because BFR 1608 bit position 1682 stores a“1.” A “1” is provided to AND gate 1605 and the “1” in bit position 1640is shifted into bit position 1641 of shift register 1610 and a “0” isshifted into bit position 1640. AND gates 1601(9)-1601(0) output0000000010, respectively, as PDATA to the cross-bar switch 430 (viawrite buffer 1504) to establish a connection between IN(1) and Y(1) atthe intersection of column 1 and row 1 of the switch matrix, asillustrated by the “+” in the row 1 and column 1 intersection of FIG.17. Since AND gates 1601(0) and 1601(2)-1601(9) output “0”s to otherpossible interconnections of row one and other columns, no connectionsare established for those intersections.

[0092] Address generator 1206 then selects a third row (row 2) incross-bar switch 430 to determine whether the third input bit positionIN(2) will be coupled to either the first, second or third output bitpositions Y(0), Y(1) or Y(2), respectively. On the next clock cycle,shift register 1610 does not shift due to the “0” stored in bit position1683 of BFR 1608. As such, no connection is established for row 2 with acolumn or output of the switch 430. That is, IN(2) is not coupled to acorresponding output bit position in the filter output string and iseffectively masked out as shown in FIG. 17.

[0093] Address generator 1206 then selects a fourth row (row 3) incross-bar switch 430 to determine whether the fourth input bit positionIN(3) will be coupled to either the first, second, third or fourthoutput bit positions Y(0), Y(1), Y(2), and Y(3), respectively. On thenext clock cycle, shift register 1610 does not shift due to the “0”stored in bit position 1684 of BFR 1608. As such, no connection isestablished for row 3 with a column or output of the switch 430. Thatis, input bit 4 is not coupled to a corresponding output bit position inthe filter output string and is effectively masked out as shown in FIG.17.

[0094] Address generator 1206 then selects a fifth row (row 4) incross-bar switch 430 to determine whether the fifth input bit positionIN(4) will be coupled to either the first, second, third, fourth orfifth output bit positions Y(0), Y(1), Y(2), Y(3), and Y(4),respectively. On a subsequent clock cycle, because a “1” is stored inbit position 1685, the “1” in bit position 1641 is shifted into bitposition 1642 of shift register 1610. AND gates 1601(9)-1601(0) output0000000100, respectively, as PDATA to the cross-bar switch 430 (viawrite buffer 1504) to establish a connection between at the intersectionof column 2 and row 4 of the switch matrix, as illustrated by the “+” inthe row 4 and column 2 intersection of FIG. 17. Thus, a connectionbetween the IN(4) and Y(2) is established. Since AND gates1601(0)-1601(1) and 1601(3)-1601(9) output “0”s to other possibleinterconnections of row one and other columns, no connections areestablished for those intersections. The completed filtering andcompacting for the programmed cross-bar switch 430 in response to theFDATA stored in BFR 1608 of FIG. 16 is shown in FIG. 17.

[0095]FIG. 18 illustrates data generator 1906 and BFR 1908 that arealternative embodiments of data generator 1506 and BFR 1508 of FIG. 15.Data generator 1906 includes shift register 1610, logic circuitry 1620and AND gate 1605 as previously discussed with respect to FIG. 15, andadditionally includes wired OR circuitry 1913 and shift register 1916.Wired OR circuitry 1913 includes an AND gate 1930 and pulldowntransistor 1931 pair coupled to receive a different FDATA bit of BFR1908 and a corresponding bit from shift register 1916. BFR 1908 outputs,in parallel, all of its bit position data to wired OR circuitry 1913.Wired OR circuitry 1913, in turn, controls the shifting operation ofshift register 1610. The output of wired OR circuitry 1913 is coupled tosignal line 1935, which is coupled to a pre-charge (PC) circuit 1918 andthe input of inverter 1919. The output of inverter 1919 is coupled to aninput of AND gate 1905. In an alternative embodiment, the FDATA storedin BFR 1608 may be complemented and inverter 1919 omitted.

[0096] Shift register 1916 shifts a “1” through its bit positions oneach clock of CLK. The outputs of AND gates 1930 are coupled to thegates of pull-down transistors 1931 such that signal line 1935 is pulledlow and shift register 1610 enabled to shift if the corresponding bitpositions in each of BFR 1908 and shift register 1916 are “1”s. In thismanner, shift register 1916 and the FDATA stored in BFR 1908 determinewhich of the data that is input to wired OR circuitry 1913 clocks shiftregister 1610 on any given clock cycle.

[0097]FIG. 19 illustrates that BFR 1508 may be implemented also as asingle column random access memory (RAM) 2002 having multiple rows tostore the filter mask bit pattern FDATA. A desired bit location in theSRAM may be accessed by inputting a decoded row address (e.g., fromaddress generator 1206 of FIG. 14). A sense amplifier (S/A) 2004 iscoupled to the rows of the RAM to output the data value stored at thatthe accessed bit location. The output of sense amplifier 2004 may becoupled, for example, to an input of AND gate 1605. RAM 2002 is known inthe art; accordingly, a detailed discussion is not provided herein. Eachof the rows of RAM 2002 may be sequenced using a counter and a decodersuch as counter 1302 and decoder 1304 discussed in relation to FIG. 12,or by other means, for example, using shift register 1402 of FIG. 13.

[0098] As mentioned above, cross-bar switch 430 may be a full cross-barswitch (e.g., as shown in FIG. 9), or may be modified so as to only useinterconnects needed to establish connections. For the embodiments ofthe data program circuit 1204 illustrated in FIGS. 11-19 that programcross-bar switch 430 to filter and compact input data from higher bitpositions to lower bit positions of the output string, only a portion ofthe crossbar switch 1000 of FIG. 9 may only be needed as shown in FIG.20. FIG. 20 shows only four rows and four columns of the modifiedcross-bar switch, but any number of rows and columns can be used.Additionally, FIG. 20 shows that each of the rows of memory storageelements 1010 are coupled to a word line (WL) to enable the elements tocommunicate data over one or more bit lines represented as D(0)-D(3).Each of the bit lines communicates a bit of the program data PDATA.

[0099]FIG. 21 illustrates programming circuit 2004, which is anotherembodiment of programming circuit 440 of FIG. 11. In this embodiment,programming circuit 2004 includes address generator 2110 and programdata generator 1502 of FIG. 14. Address generator 2110 includes counter2112, decoder 2114, and OR logic 2116. During programming, addressgenerator 2110 conditionally sequences through rows of cross-bar switch430 and programs a connection based on the FDATA stored in BFR 1508. Forexample, when a particular FDATA bit indicates that a connection is tobe established for a selected row in cross-bar switch 430, datagenerator 1506 outputs at least one signal to write buffer 1504 and ORlogic 2116 that has a logic “1” state. In response, OR logic 2116asserts the increment signal INC to an appropriate logic state such thatcounter 2112 updates its count in response to the clock signal CLK. Theoutput of the counter is decoded by decoder 2114 to select a new row incross-bar switch 430. For another embodiment, the increment signal maybe a decrement signal to decrement counter 2112. For another embodiment,counter 2112 and decoder 2114 may be replaced by a shift register thatis updated to select a row when INC is asserted to the appropriate logicstate and CLK is toggled.

[0100]FIG. 22 illustrates data generator 2202 that is one embodiment ofdata generator 1506 of FIG. 21. Data generator 2202 includes a shiftregister 2204 and AND gates 2206(0)-2206(n−1. Each AND gate2206(0)-2206(n−1 is coupled to receive corresponding bits from shiftregister 2204 and BFR 1508, and to generate a plurality of PDATA signalson signal lines 2208(0)-2208(n−1. The PDATA signals are provided towrite buffer circuitry 1504 and to OR logic 2116.

[0101] For this embodiment, a logic “1” state is shifted across the bitpositions of shift register 2204 and logically ANDed with correspondingFDATA bits in BFR 1508 by AND gates 2206(0)-2206(n−1. When an FDATA bitis in a logic “1” state, and the corresponding bit in shift register2204 is also a logic “1” state, the corresponding AND gate 2206 willgenerate a PDATA signal that will cause the corresponding row and columninterconnection in cross-bar switch 430 to be selected and programmed.All other columns for a selected row will be not be programmed orprogrammed to logic “0” states so as not to establish connections.Additionally, if one of AND gates 2206 outputs a PDATA signal with alogic “1” state, OR logic 2116 will cause the next row to be selected onthe next clock cycle to sequence to a new row for programming.

[0102] As mentioned above, cross-bar switch 430 may be a full cross-barswitch (e.g., as shown in FIG. 9), or may be modified so as to only useinterconnects needed to establish connections. For the embodiments ofthe data program circuit 1504 illustrated in FIGS. 21 and 22 thatprogram cross-bar switch 430 to filter and compact input data fromhigher bit positions to lower bit positions of the output string, only aportion of the crossbar switch 1000 of FIG. 9 may only be needed asshown in FIG. 23. FIG. 23 shows only four rows and four columns of themodified cross-bar switch, but any number of rows and columns can beused. Additionally, FIG. 2230 shows that each of the rows of memorystorage elements 1010 are coupled to a word line (WL) to enable theelements to communicate data over one or more bit lines represented asD(0)-D(3). Each of the bit lines communicates a bit of the program dataPDATA.

[0103] In the foregoing specification, the invention has been describedwith reference to specific exemplary embodiments thereof. It will,however, be evident that various modifications and changes may be madethereto without departing from the broader spirit and scope of theinvention as set forth in the appended claims. The specification anddrawings are, accordingly, to be regarded in an illustrative senserather than a restrictive sense.

What is claimed is:
 1. A method, comprising: filtering a common inputstring to generate a first filtered string and a second filtered string,wherein the first filtered string is different than the second filteredstring; compacting the first filtered string; and performing lookups infirst and second content addressable memory blocks, respectively, usingthe first and second filtered strings, respectively.
 2. A method,comprising: pre-programming a first filter circuit to generate a firstcomparand string from a common input string; and pre-programming asecond filter circuit to generate a second comparand string from thecommon input string, wherein the common input string includes the firstand second comparand strings for a content addressable memory (CAM)device.
 3. The method of claim 2, further comprising concurrentlycomparing the first and second comparand strings with data stored inseparate CAM blocks in the CAM device.
 4. The method of claim 1, furthercomprising: generating a common input string having a plurality ofcomparands; transmitting the common input string to a contentaddressable memory (CAM) device; and processing the common input stringto extract each comparand.
 5. The method of claim 4, further comprisingconcurrently comparing the plurality of extracted comparands with datastored in separate CAM blocks in the CAM device.
 6. The method of claim5, further comprising: translating a first input bit of a firstcomparand from a first bit position to a different bit position of asecond comparand; and comparing the second comparand with data stored ina first content addressable memory array of one of the separate CAMblocks.
 7. The method of claim 6, further comprising: translating asecond input bit of the first comparand from a second bit position to adifferent bit position of a third comparand; and comparing the thirdcomparand with data stored in a second content addressable memory array.8. An apparatus, comprising: a plurality of content addressable memoryblocks; and a plurality of filter circuits, each of the plurality offilter circuits coupled to a corresponding one of the plurality ofcontent addressable memory blocks, each of the plurality of filtercircuits being configured to receive a common input string and transmita filtered comparand string to the corresponding one of the plurality ofcontent addressable memory blocks, wherein the plurality of filtercircuits are pre-programmable.
 9. An apparatus, comprising: a processorto transmit an input string; a plurality of filter circuits coupled toreceive the input string from the processor; and a plurality of contentaddressable memory blocks, wherein each of the plurality of filtercircuits are coupled to a corresponding one of the plurality of contentaddressable memory blocks, each of the plurality of filter circuitsbeing configured to receive the input string and transmit a filteredcomparand string to the corresponding one of the plurality of contentaddressable memory blocks, wherein the plurality of filter circuits arepre-programmable.
 10. A method, comprising: filtering a common inputstring to generate a first filtered string and a second filtered string,wherein the first filtered string is different than the second filteredstring; pre-programming first and second filter circuits to generate thefirst and second filtered strings from the common input string; andperforming lookups in first and second filter circuits to generate thefirst and second filtered strings from the common input string; andperforming lookups in first and second content addressable memoryblocks, respectively, using the first and second filtered strings,respectively.
 11. The method of claim 10, wherein the lookups areperformed concurrently.
 12. The method of claim 10, wherein thefiltering of the common input string to generate the first and secondfiltered strings is performed concurrently using different filteringcircuits.